/**
 * @file rotation.h obracanie punktów w przestrzeni
 */

#ifndef ROTATION_H
#define ROTATION_H

#include "pointsgenerator.h"
#include <vector>
#include <iostream>

#include <QObject>

/**
 * @class Rotation
 * @brief klasa do obrotów w przestrzeni
 * klasa zajmująca się obracaniem i normalizacja wyników
 */
class Rotation : public QObject
{
	Q_OBJECT
public:
	/**
	 * @brief zwrócenie instacji klasy
	 * singleton
	 * @return instancja
	 */
	static Rotation * instance();
	/**
	 * @brief tworzenie rotacji
	 */
	void makeRotation();
signals:
	/**
	 * po skończonych obliczeniach i normalizacji wyników wysyła sygnał z kolorami poszczególnych punktów do wyrysowania
	 * @brief sygnał z mapą punktów
	 * @param pkt lista kolorów punktów
	 */
	void onPoints(const unsigned char * pkt);
public slots:
	/**
	 * @param pkt mapa punktów
	 * @param maksimum kaksymalne odchylenie od 0
	 * @brief slot odbierający dane i uruchamiejacy obroty
	 */
	void sPoints(double ** pkt, double maksimum);
	/**
	 * @brief aktualizacja danych kątów
	 */
	void sUpdateDegree();
private:
	Rotation();
	double maximum;
	double ** data;
	unsigned char * data1;
	unsigned char * preparedData;
	double x1;
	double y1;
	double z1;
	double z;
	int Aa;
	int Ba;
	int Ca;
	double cosA;
	double sinA;
	double cosB;
	double sinB;
	double cosC;
	double sinC;
};

#endif // ROTATION_H
